# 在类里面要实现enter和exit方法，创建的对象就是上下文管理器对象
class File(object):
    def __init__(self, file_name, file_mode):
        self.file_name = file_name
        self.file_mode = file_mode

    # 上文方法，提供资源对象（文件，数据库连接）
    def __enter__(self):
        print("上文执行了")
        self.file = open(self.file_name, self.file_mode)
        return self.file

    # 下文方法，释放资源
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("下文执行了")
        self.file.close()

with File("log1.txt", "w") as file:
    data = file.read()
    print(data)

# 当with语句执行完毕会自动调用exit方法